<?php
/**
 * Created by PhpStorm.
 * User: aron
 * Date: 2019/5/6
 * Time: 2:58 PM
 */

include_once "../../Util/DebugUtil/DebugUtil.php";

$contentArray = array();

function addItemToArray($array, $item) {
    if (!is_null($item)) {
        array_push($array, $item);
    }
}

DebugUtil::printDebugSeperator();
addItemToArray($contentArray, "xiaomin");
print_r($contentArray);


function addItemToArray2(&$array, $item) {
    if (!is_null($item)) {
        array_push($array, $item);
    }
}


// 可变参数的函数
echo "<br>\r\n";
addItemToArray2($contentArray, "xiaomin");
print_r($contentArray);

DebugUtil::printDebugSeperator();
function moreArgs() {
    // func_get_args方法获取函数的参数列表
    $args = func_get_args();
    for ($i = 0; $i < count($args); $i ++) {
        echo "第${i}个参数是${args[$i]} <br>\r\n";
    }
}

moreArgs("A", "B", "C");
// Output:
//第0个参数是A
//第1个参数是B
//第2个参数是C


// 变量函数
function add($a, $b) {
    return $a + $b;
}

function sub($a, $b) {
    return $a - $b;
}

function mul($a, $b) {
    return $a * $b;
}

function div($a, $b) {
    return $a / $b;
}

$a = 123;
$b = 2345;
$operArr = array("add", "sub", "mul", "div");
foreach ($operArr as $ope) {
    $result = $ope($a, $b);
    echo $ope . "($a, $b) = $result <br>\r\n";
}

// Output:
//add(123, 2345) = 2468
//sub(123, 2345) = -2222
//mul(123, 2345) = 288435
//div(123, 2345) = 0.052452025586354


// 回调函数
class Demo {
    static function fun($msg1, $msg2)
    {
        echo "\$msg1 = " . $msg1;
        echo "<br>";
        echo "\$msg2 = " . $msg2;
        echo "<br>";
    }
}

class Test {
    function fun($msg1, $msg2)
    {
        echo "\$msg1 = " . $msg1;
        echo "<br>";
        echo "\$msg2 = " . $msg2;
        echo "<br>";
    }
}

// 使用call_user_func_array调用类中的静态方法
call_user_func_array(array("Demo", "fun"), array("Lamp", "XDL"));
// Output:
//$msg1 = Lamp
//$msg2 = XDL
// 使用call_user_func_array调用对象的成员方法
call_user_func_array(array(new Test(), "fun"), array("Lamp2", "XDL2"));
// Output:
//$msg1 = Lamp2
//$msg2 = XDL2

callback("");


// 使用自定义的函数库
// 可以使用以下的语法结构导入PHP文件，使用PHP文件中的函数
//require  文件只读取一次，实际上文件的内容会替换require语句
//require_once  不会重复包含
//include  执行前每次都要进行读取和评估
//include_once  不会重复包含


